package com.ppch.zerocodegenerator.core.deprecated;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.ppch.zerocodegenerator.ai.enums.CodeGenTypeEnum;
import com.ppch.zerocodegenerator.ai.model.code_result.HtmlCodeResult;
import com.ppch.zerocodegenerator.ai.model.code_result.MultiFileCodeResult;

import java.io.File;
import java.nio.charset.StandardCharsets;


/**
 * 代码文件保存器
 */
@Deprecated
public class CodeFileSaver {

    // 文件保存根目录
    private static final String FILE_SAVE_ROOT_DIR = System.getProperty("user.dir") + "/temp/code_output";

    /**
     * 根据代码生成模式构建唯一的目录路径，避免目录重复，文件被覆盖：System.getProperty("user.dir") + temp/code_output/bizType_雪花ID
     * @param bizType 代码生成模式
     * @return 文件唯一路径
     */
    private static String buildUniqueDir(String bizType) {
        // 根据代码生成模式构建唯一的目录路径: bizType_雪花ID
        String uniqueDirName = StrUtil.format("{}_{}", bizType, IdUtil.getSnowflakeNextIdStr());
        // System.getProperty("user.dir") + temp/code_output/bizType_雪花ID
        String dirPath = FILE_SAVE_ROOT_DIR + File.separator + uniqueDirName;
        // 如果目录不存在，则创建目录
        FileUtil.mkdir(dirPath);
        return dirPath;
    }

    /**
     * 将内容写入文件
     * @param dirPath 目录路径
     * @param filename 文件名
     * @param content 内容
     */
    private static void writeToFile(String dirPath, String filename, String content) {
        String filePath = dirPath + File.separator + filename;
        FileUtil.writeString(content, filePath, StandardCharsets.UTF_8);
    }

    /**
     * 保存 HtmlCodeResult
     * 从结构化输出类中获取生成的代码，并保存到文件中
     * @param result 生成的代码
     * @return 代码文件
     */
    public static File saveHtmlCodeResult(HtmlCodeResult result) {
        String baseDirPath = buildUniqueDir(CodeGenTypeEnum.HTML.getValue());
        writeToFile(baseDirPath, "index.html", result.getHtmlCode());
        return new File(baseDirPath);
    }

    /**
     * 保存 MultiFileCodeResult
     * 从结构化输出类中获取生成的代码，并保存到文件中
     * @param result 生成的代码
     * @return 代码文件
     */
    public static File saveMultiFileCodeResult(MultiFileCodeResult result) {
        String baseDirPath = buildUniqueDir(CodeGenTypeEnum.MULTI_FILE.getValue());
        writeToFile(baseDirPath, "index.html", result.getHtmlCode());
        writeToFile(baseDirPath, "style.css", result.getCssCode());
        writeToFile(baseDirPath, "script.js", result.getJsCode());
        return new File(baseDirPath);
    }
}
